/*************************************************************************************
 * Nombre del archivo: Estado.java
 * Universidad del Valle de Guatemala
 * Curso: Diseño de Lenguajes de Programación
 * @author martin
 *          Martín Guzmán 08041
 * Fecha: Marzo de 2010
 * Descripción:
*************************************************************************************/
import java.util.LinkedList;

public class Estado {
    private LinkedList<Integer> lista=new LinkedList<Integer>();
    private String nombre = "";
    private boolean marcado=false;

    private LinkedList<Character> minim_caracter= new LinkedList<Character>();
    private LinkedList<Integer> minim_grupo= new LinkedList<Integer>();
    private int grupo_II_al_que_pertenece=-1;
    
    public Estado(){}


    public Estado(LinkedList<Integer> lista){
        agregar_a_lista(lista,this.lista);
    }

    public Estado(String nombre){
        this.nombre = nombre;
    }

    public Estado(String nombre,LinkedList<Integer> lista){
        this.nombre = nombre;
        agregar_a_lista(lista,this.lista);
    }

    /***********************************************
     * Método: agregar_a_lista
     * Uso: Agrega los elementos de lista_fuente a
     *      lista_destino
     *      contiene primera_pos del nodo especificado
     * @return LinkedList<Integer> con los elementos
    ***********************************************/
    public void agregar_a_lista(LinkedList<Integer> lista_fuente, LinkedList<Integer> lista_destino){
        for(int i=0;i<lista_fuente.size();i++){
            lista_destino.add(lista_fuente.get(i));
        }
    }

    /***********************************************
     * Método: getLista
     * Uso: Retorna la lista de enteros del estado
     * @return LinkedList<Integer> con la lista
    ***********************************************/
    public LinkedList<Integer> getLista() {
        return lista;
    }

    /***********************************************
     * Método: setLista
     * Uso: setea la lista
     * @return void
    ***********************************************/
    public void setLista(LinkedList<Integer> lista) {
        this.lista = lista;
    }

    /***********************************************
     * Método: getNombre
     * Uso: Retorna el nombre del estado
     * @return String con el nombre del estado
    ***********************************************/
    public String getNombre() {
        return nombre;
    }

    /***********************************************
     * Método: setNombre
     * Uso: setea el nombre del estado
     * @return void
    ***********************************************/
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }


    public String toString(){
        return this.nombre;
    }

    /**
     * @return the marcado
     */
    public boolean isMarcado() {
        return marcado;
    }

    /**
     * @param marcado the marcado to set
     */
    public void setMarcado(boolean marcado) {
        this.marcado = marcado;
    }

    public void pertence_grupo_II(Integer a){
        this.grupo_II_al_que_pertenece=a;
    }

    public void add_minim_caracter(Character a){
        minim_caracter.add((Character)a);
    }

    public void add_minim_grupo(Integer a){
        minim_grupo.add((Integer)a);
    }

    public void clear_minim_caracter(){
        minim_caracter.clear();
    }

    public void clear_minim_grupo(){
        minim_grupo.clear();
    }

    public LinkedList<Character> get_minim_caracter(){
        return minim_caracter;
    }

    public LinkedList<Integer> get_minim_grupo(){
        return minim_grupo;
    }

    public String get_min(){
        String retorno = "";
        for(int i=0;i<this.minim_caracter.size();i++){
            retorno += "("+this.minim_caracter.get(i)+","+this.minim_grupo.get(i)+")";
        }
        retorno +="-"+this.grupo_II_al_que_pertenece;
        return retorno;
    }
}
